import { Controller } from '@nestjs/common';
import { AppService } from './app.service';
import { EventPattern, MessagePattern, Payload } from '@nestjs/microservices';

//如果那边是 @MessagePattern 声明的方法，这边要用 send 方法调用。
//如果并不需要返回消息的话，可以用 @EventPattern 声明。而 @EventPattern 声明的方法，这边要用 emit 方法调用。

// 从抓包我们可以得出结论：
// 微服务之间的 tcp 通信的消息格式是 json
// 如果是 message 的方式，需要两边各发送一个 tcp 包，也就是一问一答的方式
// 如果是 event 的方式，只需要客户端发送一个 tcp 的包

@Controller()
export class AppController {
  constructor(private readonly appService: AppService) {}

  @MessagePattern({
    cmd: 'sum',
  })
  sum(@Payload() numArr: Array<number>): Promise<number> {
    console.log('Received:', numArr);
    return new Promise((resolve) => {
      resolve(numArr.reduce((acc, curr) => acc + curr, 0));
    });
  }

  //不能为单独的number类型，否则会报错
  @EventPattern('log')
  event(str: any) {
    console.log(str);
  }
}

// The only difference is that the decorator now takes a string instead of an object with a `cmd` property.
